import 'package:flutter/material.dart';
import 'navigatorSecond.dart';
import 'beanPage.dart';
import 'peopleBean.dart';

void main() => runApp(HomePage());

String mainToSecondValue = '我是传递过来的值，点我！';
const String navigatorSecondPage = 'navigatorSecond';
const String navigatorBeanPage = 'navigatorBeanPage';


class HomePage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(

      home: NavigatorMain(),

      routes: <String, WidgetBuilder>{

        //通过构造方法传值  也可以在pushName的时候给 arguments 赋值，然后再通过构造方法传递
        navigatorSecondPage: (BuildContext context) => NavigatorSecond(text:mainToSecondValue),

        //通过 arguments 传值
        navigatorBeanPage: (BuildContext context) => BeanPage()
      },


//      onGenerateRoute: (RouteSettings settings) {
//        print("wy_" + settings.name);
//        switch(settings.name){
//
//          case navigatorSecondPage:
//
//
//            break;
//        }
//        return MaterialPageRoute(builder: (context) {
//          String routeName = settings.name;
//          // 如果访问的路由页需要登录，但当前未登录，则直接返回登录页路由，
//          // 引导用户登录；其它情况则正常打开路由。
//
//
//          return NavigatorMain();
//        });
//      },
    );
  }
}

class NavigatorMain extends StatefulWidget {

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return NavigatorMainState();
  }

}

class NavigatorMainState extends State<NavigatorMain> {

  String result = "init";

  dynamic mResult;

  var index = 0;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(

      appBar: AppBar(title: Text('navigatorMain'),),

      body: Flex(direction: Axis.vertical,

        children: <Widget>[

          RaisedButton(

            child: Text('startSecond'),
            /**
             * Navigator
             * Navigator.push 将给定的路由入栈（即打开新的页面），返回值是一个Future对象，用以接收新路由出栈（即关闭）时的返回数据
             * Navigator.pop  将栈顶路由出栈，result为页面关闭时返回给上一个页面的数据。
             *
             *
             *
             * MaterialPageRoute 参数
             * builder 是一个WidgetBuilder类型的回调函数。要启动的页面
             * settings 包含路由的配置信息，如路由名称、是否初始路由（首页）。
             * maintainState：默认情况下，当入栈一个新路由时，原来的路由仍然会被保存在内存中，
             *                如果想在路由没用的时候释放其所占用的所有资源，可以设置maintainState为false。
             * fullscreenDialog表示新的路由页面是否是一个全屏的模态对话框，
             *                在iOS中，如果fullscreenDialog为true，新页面将会从屏幕底部滑入（而不是水平方向）
             */
            onPressed: () async {
//              result = await Navigator.push(context, MaterialPageRoute(builder: (context){
//
//                return NavigatorSecond(text: mainToSecondValue,);
//
//              }));

              ///返回值是一个 dynamic
              mResult = await Navigator.pushNamed(context, navigatorSecondPage);

              result = mResult as String;

//              setState(() {
//
//              });
              print("路由返回值: $result");
            },
          ),

          Text(result + "$index"),


          RaisedButton(

            onPressed: () {
              index++;
              setState(() {

              });
            },
          ),


          RaisedButton(

            child: Text('传递Bean'),
            onPressed: (){

              Navigator.pushNamed(context, navigatorBeanPage,arguments: PeopleBean('张三', '18'));
            },
          )
        ],
      ),

    );
  }
}